//
// Created by 32827 on 2023/11/25.
//

#ifndef YZFRAME_YZF_DMA_H
#define YZFRAME_YZF_DMA_H
#include "yzf.h"
extern YZF_DMA_CHANNEL_POINTER CHANNEL_TEMP;
extern YZF_DMA_POINTER DMA_TEMP;
#define YDMACH(X) (CHANNEL_TEMP=X);
#define YDMA(X) (DMA_TEMP=X);

YZF_RESULT yzf_dma_clock_enable(YZF_DMA_POINTER dma);
YZF_RESULT yzf_dma_clock_disable(YZF_DMA_POINTER dma);
//传输错误标志
YZF_BOOL yzf_dma_flag_TE(YZF_DMA_POINTER dma,uint8_t channel);
//半传输标志
YZF_BOOL yzf_dma_flag_HT(YZF_DMA_POINTER dma,uint8_t channel);
//传输完成标志
YZF_BOOL yzf_dma_flag_TC(YZF_DMA_POINTER dma,uint8_t channel);
//全局中断标志
YZF_BOOL yzf_dma_flag_G(YZF_DMA_POINTER dma,uint8_t channel);
//传输错误标志清除
YZF_RESULT yzf_dma_clear_flag_TEIF(YZF_DMA_POINTER dma,uint8_t channel);
//半传输标志清除
YZF_RESULT yzf_dma_clear_flag_HTIF(YZF_DMA_POINTER dma,uint8_t channel);
//传输完成标志清除
YZF_RESULT yzf_dma_clear_flag_TCIF(YZF_DMA_POINTER dma,uint8_t channel);
//全局中断标志清除
YZF_RESULT yzf_dma_clear_flag_GIF(YZF_DMA_POINTER dma,uint8_t channel);

//存储器到存储器
YZF_RESULT yzf_dma_mode_mem_mem(YZF_DMA_CHANNEL_POINTER channel);
//非存储器到存储器
YZF_RESULT yzf_dma_mode_per_mem(YZF_DMA_CHANNEL_POINTER channel);

//设置通道优先级
YZF_RESULT yzf_dma_set_priority(YZF_DMA_CHANNEL_POINTER channel,YZF_DMA_PRIORITY priority);

//存储器数据宽度
YZF_RESULT yzf_dma_mem_size(YZF_DMA_CHANNEL_POINTER channel,YZF_DMA_SIZE size);
//设备数据宽度
YZF_RESULT yzf_dma_per_size(YZF_DMA_CHANNEL_POINTER channel,YZF_DMA_SIZE size);

//内存是否递增
YZF_RESULT yzf_dma_mode_mem_inc(YZF_DMA_CHANNEL_POINTER channel,YZF_BOOL enable);
//设备是否递增
YZF_RESULT yzf_dma_mode_per_inc(YZF_DMA_CHANNEL_POINTER channel,YZF_BOOL enable);

//循环接收
YZF_RESULT yzf_dma_mode_circular(YZF_DMA_CHANNEL_POINTER channel,YZF_BOOL enable);

//从外设读
YZF_RESULT yzf_dma_mode_per_read(YZF_DMA_CHANNEL_POINTER channel);
//从内存读
YZF_RESULT yzf_dma_mode_mem_read(YZF_DMA_CHANNEL_POINTER channel);

//传输错误中断
YZF_RESULT yzf_dma_interrupt_TE(YZF_DMA_CHANNEL_POINTER channel,YZF_BOOL enable);
//传输完成中断
YZF_RESULT yzf_dma_interrupt_TC(YZF_DMA_CHANNEL_POINTER channel,YZF_BOOL enable);
//半传输中断
YZF_RESULT yzf_dma_interrupt_HT(YZF_DMA_CHANNEL_POINTER channel,YZF_BOOL enable);

//dma开启/关闭
YZF_RESULT yzf_dma_enable(YZF_DMA_CHANNEL_POINTER channel);
YZF_RESULT yzf_dma_disable(YZF_DMA_CHANNEL_POINTER channel);

//传输数量
YZF_RESULT yzf_dma_transmit_count(YZF_DMA_CHANNEL_POINTER channel,uint16_t count);
//设备地址
YZF_RESULT yzf_dma_per_address(YZF_DMA_CHANNEL_POINTER channel,uint32_t address);
//内存地址
YZF_RESULT yzf_dma_mem_address(YZF_DMA_CHANNEL_POINTER channel,uint32_t address);
#endif //YZFRAME_YZF_DMA_H
